/**
 * \file new.h
 * \brief C++ allocation/deallocation definitions
 */

/*
   Copyright 2006 Corey Tabaka

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

#ifndef __KERNEL_NEW_H__
#define __KERNEL_NEW_H__

extern "C++" {
	
/*
 * Standard new/delete for objects and arrays
 */
void *operator new(uint32 size);
void *operator new[](uint32 size);
void operator delete(void *arg);
void operator delete[](void *arg);

/*
 * Realloc array new. Reallocates the supplied array. Uses an additional
 * ignored parameter to differentiate it from array placement new.
 */
void *operator new[](uint32 size, void *p, uint32 token);

// Default placement versions of operator new.
inline void* operator new(uint32, void* __p) throw() { return __p; }
inline void* operator new[](uint32, void* __p) throw() { return __p; }

// Default placement versions of operator delete.
inline void  operator delete  (void*, void*) throw() { };
inline void  operator delete[](void*, void*) throw() { };

}

#endif
